home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / hplip / base / maint.py < prev    next >
Encoding:
Python Source  |  2009-10-09  |  46.0 KB  |  1,559 lines

  1. # -*- coding: utf-8 -*-
  2. #
  3. # (c) Copyright 2003-2007 Hewlett-Packard Development Company, L.P.
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 2 of the License, or
  8. # (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18. #
  19. # Author: Don Welch
  20. #
  21.  
  22. # NOTE: Not used by Qt4 code. Use maint_*.py modules instead.
  23.  
  24. # Local
  25. from g import *
  26. from codes import *
  27. import status, pml
  28. from prnt import pcl, ldl, colorcal
  29.  
  30. # ********************** Align **********************
  31.  
  32. def AlignType1(dev, loadpaper_ui): # Auto VIP (using embedded PML)
  33.     ok = loadpaper_ui()
  34.     if ok:
  35.         dev.writeEmbeddedPML(pml.OID_AUTO_ALIGNMENT,
  36.                              pml.AUTO_ALIGNMENT, style=0, 
  37.                              direct=True)
  38.         dev.closePrint()
  39.  
  40.     return ok
  41.     
  42. def AlignType1PML(dev, loadpaper_ui): # Auto VIP (using PML)
  43.     ok = loadpaper_ui()
  44.     if ok:
  45.         dev.setPML(pml.OID_AUTO_ALIGNMENT, pml.AUTO_ALIGNMENT)
  46.         dev.closePML()
  47.  
  48.     return ok
  49.  
  50.  
  51.  
  52. def AlignType2(dev, loadpaper_ui, align_ui, bothpens_ui): # 8xx
  53.     state, a, b, c, d = 0, 6, 6, 3, 3
  54.     ok = False
  55.     while state != -1:
  56.         if state == 0:
  57.             state = 1
  58.             pens = dev.getStatusFromDeviceID()['agents']
  59.             pen_types = [pens[x] for x in range(len(pens))]
  60.             if AGENT_TYPE_NONE in pen_types:
  61.                 log.error("Cannot perform alignment with 0 or 1 pen installed.")
  62.                 state = 100
  63.  
  64.         elif state == 1:
  65.             state = -1
  66.             ok = loadpaper_ui()
  67.             if ok:
  68.                 state = 2
  69.  
  70.         elif state == 2:
  71.             state = -1
  72.             alignType2Phase1(dev)
  73.             ok, a = align_ui('A', 'h', 'kc', 2, 11)
  74.             if ok:
  75.                 state = 3
  76.  
  77.         elif state == 3:
  78.             state = -1
  79.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  80.             if ok:
  81.                 state = 4
  82.  
  83.         elif state == 4:
  84.             state = -1
  85.             ok, c = align_ui('C', 'v', 'kc', 2, 5)
  86.             if ok:
  87.                 state = 5
  88.  
  89.         elif state == 5:
  90.             state = -1
  91.             ok, d = align_ui('D', 'v', 'c', 2, 5)
  92.             if ok:
  93.                 state = 6
  94.  
  95.         elif state == 6:
  96.             ok = loadpaper_ui()
  97.             if ok:
  98.                 alignType2Phase2(dev, a, b, c, d)
  99.             state = -1
  100.  
  101.         elif state == 100:
  102.             ok = False
  103.             bothpens_ui()
  104.             state = -1
  105.  
  106.     return ok
  107.  
  108.  
  109.  
  110. def AlignType3(dev, loadpaper_ui, align_ui, paperedge_ui, align_type): # 9xx
  111.     state, a, b, c, d, zca = 0, 6, 6, 3, 3, 6
  112.     ok = False
  113.     while state != -1:
  114.         if state == 0:
  115.             state = -1
  116.             ok = loadpaper_ui()
  117.             if ok:
  118.                 alignType3Phase1(dev)
  119.                 state = 1
  120.  
  121.         elif state == 1:
  122.             state = -1
  123.             ok, a = align_ui('A', 'h', 'kc', 2, 11)
  124.             if ok:
  125.                 state = 2
  126.  
  127.         elif state == 2:
  128.             state = -1
  129.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  130.             if ok:
  131.                 state = 3
  132.  
  133.         elif state == 3:
  134.             state = -1
  135.             ok, c = align_ui('C', 'v', 'k', 2, 11)
  136.             if ok:
  137.                 state = 4
  138.  
  139.         elif state == 4:
  140.             state = -1
  141.             ok, d = align_ui('D', 'v', 'kc', 2, 11)
  142.             if ok:
  143.                 state = 5
  144.  
  145.         elif state == 5:
  146.             state = -1
  147.             alignType3Phase2(dev, a, b, c, d)
  148.             if align_type == 9:
  149.                 state = 7
  150.             else:
  151.                 ok = loadpaper_ui()
  152.                 if ok:
  153.                     state = 6
  154.  
  155.         elif state == 6:
  156.             state = -1
  157.             alignType3Phase3(dev)
  158.             ok, zca = paperedge_ui(13)
  159.             if ok:
  160.                 state = 7
  161.  
  162.         elif state == 7:
  163.             ok = loadpaper_ui()
  164.             if ok:
  165.                 alignType3Phase4(dev, zca)
  166.             state = -1
  167.  
  168.     return ok
  169.  
  170.  
  171. def AlignxBow(dev, align_type, loadpaper_ui, align_ui, paperedge_ui,
  172.                invalidpen_ui, coloradj_ui): # Types 4, 5, and 7
  173.  
  174.     state, statepos = 0, 0
  175.     user_cancel_states = [1000, -1]
  176.     a, b, c, d, e, f, g = 0, 0, 0, 0, 0, 0, 0
  177.     error_states = [-1]
  178.     ok = False
  179.  
  180.     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  181.  
  182.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  183.         state, states = 100, [-1]
  184.  
  185.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  186.         state, states = 0, [2, 200, 3, -1]
  187.  
  188.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  189.         state, states = 0, [2, 200, 3, -1]
  190.  
  191.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  192.         state, states = 0, [2, 300, 3, -1]
  193.  
  194.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  195.         state, states = 0, [2, 400, 500, 600, 700, 3, 4, -1]
  196.  
  197.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  198.         state, states = 0, [2, 400, 500, 600, 700, 800, 900, 3, 4, -1]
  199.  
  200.     while state != -1:
  201.  
  202.         if state == 0:
  203.             ok = loadpaper_ui()
  204.             if ok:
  205.                 if align_type == 4:
  206.                     alignType4Phase1(dev)
  207.                 elif align_type == 5:
  208.                     alignType5Phase1(dev)
  209.                 elif align_type == 7:
  210.                     alignType7Phase1(dev)
  211.                 else:
  212.                     statepos, states = 0, error_states
  213.             else:
  214.                 statepos, states = 0, user_cancel_states
  215.  
  216.  
  217.         elif state == 2:
  218.             ok, a = paperedge_ui(13)
  219.             if not ok:
  220.                 statepos, states = 0, user_cancel_states
  221.  
  222.         elif state == 3:
  223.             if align_type == 4:
  224.                 alignType4Phase2(dev, a, b, c, d, e)
  225.             elif align_type == 5:
  226.                 alignType5Phase2(dev, a, b, c, d, e, f, g)
  227.             else:
  228.                 alignType7Phase2(dev, a, b, c, d, e, f, g)
  229.  
  230.         elif state == 4:
  231.             ok = loadpaper_ui()
  232.             if ok:
  233.                 if align_type == 4:
  234.                     alignType4Phase3(dev)
  235.                 elif align_type == 5:
  236.                     alignType5Phase3(dev)
  237.                 else:
  238.                     alignType7Phase3(dev)
  239.             else:
  240.                 statepos, states = 0, user_cancel_states
  241.  
  242.         elif state == 100:
  243.             invalidpen_ui()
  244.             state = -1
  245.  
  246.         elif state == 200: # B Line - Black only or photo only
  247.             ok, b = align_ui('B', 'v', 'k', 2, 11)
  248.             if not ok:
  249.                 statepos, states = 0, user_cancel_states
  250.  
  251.         elif state == 300: # B Line - Color only
  252.             ok, b = align_ui('B', 'v', 'kc', 2, 11)
  253.             if not ok:
  254.                 statepos, states = 0, user_cancel_states
  255.  
  256.         elif state == 400: # B Line - 2 pen
  257.             ok, b = align_ui('B', 'h', 'kc', 2, 17)
  258.             if not ok:
  259.                 statepos, states = 0, user_cancel_states
  260.  
  261.         elif state == 500: # C Line
  262.             ok, c = align_ui('C', 'v', 'kc', 2, 17)
  263.             if not ok:
  264.                 statepos, states = 0, user_cancel_states
  265.  
  266.         elif state == 600 : # D Line
  267.             ok, d = align_ui('D', 'v', 'k', 2, 11)
  268.             if not ok:
  269.                 statepos, states = 0, user_cancel_states
  270.  
  271.         elif state == 700: # E Line
  272.             ok, e = align_ui('E', 'v', 'kc', 2, 11)
  273.             if not ok:
  274.                 statepos, states = 0, user_cancel_states
  275.  
  276.         elif state == 800: # F Line
  277.             ok, f = coloradj_ui('F', 21)
  278.             if not ok:
  279.                 statepos, states = 0, user_cancel_states
  280.  
  281.         elif state == 900: # G Line
  282.             ok, f = coloradj_ui('G', 21)
  283.             if not ok:
  284.                 statepos, states = 0, user_cancel_states
  285.  
  286.         elif state == 1000: # User cancel
  287.             ok = False
  288.             log.warning("Alignment canceled at user request.")
  289.  
  290.         state = states[statepos]
  291.         statepos += 1
  292.  
  293.     return ok
  294.  
  295.  
  296. def AlignType6(dev, ui1, ui2, loadpaper_ui):
  297.     state = 0
  298.     ok = False
  299.  
  300.     while state != -1:
  301.         if state == 0:
  302.             state = 2
  303.             accept = ui1()
  304.             if not accept:
  305.                 # Need to printout alignment page
  306.                 state = 1
  307.  
  308.         elif state == 1: # Load and print
  309.             state = -1
  310.             ok = loadpaper_ui()
  311.             if ok:
  312.                 alignType6Phase1(dev)
  313.                 state = 2
  314.  
  315.         elif state == 2: # Finish
  316.             ui2()
  317.             state = -1
  318.  
  319.  
  320.     return ok
  321.  
  322. def AlignType8(dev, loadpaper_ui, align_ui): # 450
  323.     state, a, b, c, d = 0, 5, 5, 5, 5
  324.     ok = False
  325.  
  326.     while state != -1:
  327.  
  328.         if state == 0:
  329.             state = -1
  330.             ok = loadpaper_ui()
  331.             if ok:
  332.                 num_inks = alignType8Phase1(dev)
  333.                 state = 1
  334.  
  335.         elif state == 1:
  336.             state = -1
  337.             ok, a = align_ui('A', 'v', 'k', 3, 9)
  338.             if ok:
  339.                 state = 2
  340.  
  341.         elif state == 2:
  342.             state = -1
  343.             ok, b = align_ui('B', 'v', 'c', 3, 9)
  344.             if ok:
  345.                 state = 3
  346.  
  347.         elif state == 3:
  348.             state = -1
  349.             ok, c = align_ui('C', 'v', 'kc', 3, 9)
  350.             if ok:
  351.                 state = 4
  352.  
  353.         elif state == 4:
  354.             state = -1
  355.             ok, d = align_ui('D', 'h', 'kc', 3, 9)
  356.             if ok:
  357.                 state = 5
  358.  
  359.         elif state == 5:
  360.             alignType8Phase2(dev, num_inks, a, b, c, d)
  361.             state = -1
  362.  
  363.     return ok
  364.  
  365.  
  366. def AlignType10(dev, loadpaper_ui, align_ui):
  367.     pattern = alignType10SetPattern(dev)
  368.     state = 0
  369.  
  370.     while state != -1:
  371.         if state == 0:
  372.             state = -1
  373.             ok = loadpaper_ui()
  374.             if ok:
  375.                 alignType10Phase1(dev)
  376.                 state = 1
  377.  
  378.         elif state == 1:
  379.             values = align_ui(pattern, ALIGN_TYPE_LBOW)
  380.             log.debug(values)
  381.             alignType10Phase2(dev, values, pattern)
  382.             state = 2
  383.  
  384.         elif state == 2:
  385.             state = -1
  386.             ok = loadpaper_ui()
  387.             if ok:
  388.                 alignType10Phase3(dev)
  389.  
  390.  
  391. def alignType10SetPattern(dev):
  392.     pattern = None
  393.     pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  394.     log.debug("Pen config=%d" % pen_config)
  395.  
  396.     if pen_config == AGENT_CONFIG_BLACK_ONLY:
  397.         pattern = 1
  398.  
  399.     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  400.         pattern = 2
  401.  
  402.     elif pen_config in (AGENT_CONFIG_COLOR_AND_PHOTO, AGENT_CONFIG_COLOR_AND_GREY):
  403.         pattern = 3
  404.  
  405.     log.debug("Pattern=%d" % pattern)
  406.     return pattern
  407.     
  408.  
  409. def alignType10Phase1(dev):
  410.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  411.                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
  412.  
  413.     dev.closePrint()
  414.  
  415.  
  416. def alignType10Phase2(dev, values, pattern):
  417.     i, p = 0, ''.join([pcl.UEL, '\n'])
  418.  
  419.     for x in values:
  420.         i += 1
  421.         if not x:
  422.             break
  423.         p = ''.join([p, pcl.ESC, '*o5W\x1a', chr(i), '\x00', chr(pattern), chr(x), '\n'])
  424.  
  425.     p = ''.join([p, pcl.UEL]) 
  426.  
  427.     dev.printData(p)
  428.     dev.closePrint()
  429.  
  430.  
  431. def alignType10Phase3(dev):
  432.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  433.                          pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE_VERIFICATION)
  434.  
  435.     dev.closePrint()
  436.  
  437.  
  438. def align10and11and14Controls(pattern, align_type):
  439.     if align_type == ALIGN_TYPE_LIDIL_0_5_4:
  440.         if pattern == 1:
  441.             controls = { 'A' : (True, 23),
  442.                          'B' : (True, 9),
  443.                          'C' : (True, 9),
  444.                          'D' : (False, 0),
  445.                          'E' : (False, 0),
  446.                          'F' : (False, 0),
  447.                          'G' : (False, 0),
  448.                          'H' : (False, 0),}
  449.         elif pattern == 2: # K + color (ii)
  450.             controls = { 'A' : (True, 17),
  451.                          'B' : (True, 23),
  452.                          'C' : (True, 23),
  453.                          'D' : (True, 23),
  454.                          'E' : (True, 9),
  455.                          'F' : (True, 9),
  456.                          'G' : (True, 9),
  457.                          'H' : (True, 9),}
  458.  
  459.         elif pattern == 3: # color + photo (iii)
  460.             controls = { 'A' : (True, 9),
  461.                          'B' : (True, 23),
  462.                          'C' : (True, 23),
  463.                          'D' : (True, 23),
  464.                          'E' : (True, 9),
  465.                          'F' : (True, 9),
  466.                          'G' : (True, 9),
  467.                          'H' : (True, 9),}
  468.  
  469.     elif align_type == ALIGN_TYPE_LIDIL_DJ_D1600:
  470.         if pattern == 1:
  471.             controls = { 'A' : (True, 23),
  472.                          'B' : (True, 9),}
  473.         elif pattern == 2: # K + color (ii)
  474.             controls = { 'A' : (True, 23),
  475.                          'B' : (True, 11),
  476.                          'C' : (True, 23),
  477.                          'D' : (True, 23),
  478.                          'E' : (True, 11),
  479.                          'F' : (True, 11),
  480.                          'G' : (True, 11),
  481.                          'H' : (True, 9),
  482.                          'I' : (True, 9),}
  483.  
  484.         elif pattern == 3: # color + photo (iii)
  485.             controls = { 'A' : (True, 9),
  486.                          'B' : (True, 23),
  487.                          'C' : (True, 23),
  488.                          'D' : (True, 23),
  489.                          'E' : (True, 9),
  490.                          'F' : (True, 9),
  491.                          'G' : (True, 9),
  492.                          'H' : (True, 9),
  493.                          'I' : (True, 9),}    
  494.  
  495.     else:
  496.         if pattern == 1:
  497.             controls = {'A' : (True, 23),
  498.                          'B' : (True, 9),
  499.                          'C' : (True, 9),
  500.                          'D' : (False, 0),
  501.                          'E' : (False, 0),
  502.                          'F' : (False, 0),
  503.                          'G' : (False, 0),
  504.                          'H' : (False, 0),}
  505.         elif pattern == 2:
  506.             controls = {'A' : (True, 23),
  507.                         'B' : (True, 17),
  508.                          'C' : (True, 23),
  509.                          'D' : (True, 23),
  510.                          'E' : (True, 9),
  511.                          'F' : (True, 9),
  512.                          'G' : (True, 9),
  513.                          'H' : (True, 9),}
  514.  
  515.         elif pattern == 3:
  516.             controls = {'A' : (True, 23),
  517.                          'B' : (True, 9),
  518.                          'C' : (True, 23),
  519.                          'D' : (True, 23),
  520.                          'E' : (True, 9),
  521.                          'F' : (True, 9),
  522.                          'G' : (True, 9),
  523.                          'H' : (True, 9),}
  524.  
  525.     return controls
  526.  
  527.  
  528. def AlignType11(dev, loadpaper_ui, align_ui, invalidpen_ui):
  529.     pattern = alignType11SetPattern(dev)
  530.     if pattern is None:
  531.         invalidpen_ui()
  532.         return
  533.         
  534.     state = 0
  535.     while state != -1:
  536.         if state == 0:
  537.             state = -1
  538.             ok = loadpaper_ui()
  539.             if ok:
  540.                 alignType11Phase1(dev)
  541.                 state = 1
  542.  
  543.         elif state == 1:
  544.             values = align_ui(pattern, ALIGN_TYPE_LIDIL_0_5_4)
  545.             log.debug(values)
  546.             alignType11Phase2(dev, values, pattern, dev.pen_config)
  547.             state = 2
  548.  
  549.         elif state == 2:
  550.             state = -1
  551.             ok = loadpaper_ui()
  552.             if ok:
  553.                 alignType11Phase3(dev)
  554.  
  555.  
  556. def alignType11SetPattern(dev):
  557.     pattern = None
  558.     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  559.     log.debug("Pen config=%d" % dev.pen_config)
  560.  
  561.     if dev.pen_config in (AGENT_CONFIG_BLACK_ONLY, AGENT_CONFIG_COLOR_ONLY): # (i)
  562.         pattern = 1
  563.  
  564.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK: # (ii)
  565.         pattern = 2
  566.  
  567.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO: # (iii)
  568.         pattern = 3
  569.  
  570.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  571.         return None
  572.  
  573.     log.debug("Pattern=%d" % pattern) 
  574.     return pattern
  575.     
  576.  
  577. def alignType11Phase1(dev):
  578.     dev.printData(ldl.buildResetPacket())
  579.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION))
  580.     dev.closePrint()
  581.  
  582.  
  583. def alignType11Phase2(dev, values, pattern, pen_config):
  584.     active_colors = 0
  585.  
  586.     if pen_config == AGENT_CONFIG_BLACK_ONLY:
  587.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K
  588.         values = values[:3]
  589.  
  590.     elif pen_config == AGENT_CONFIG_COLOR_ONLY:
  591.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  592.         values = values[:3]
  593.  
  594.     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  595.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K | ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  596.  
  597.     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  598.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR | ldl.COMMAND_SET_PEN_ALIGNMENT_3_PHOTO
  599.  
  600.     log.debug("Active colors=0x%x Values=%s" % (active_colors, values))
  601.  
  602.     dev.printData(ldl.buildSetPenAlignment3Packet(active_colors, values))
  603.     dev.closePrint()
  604.  
  605. def alignType11Phase3(dev):
  606.     dev.printData(ldl.buildResetPacket())
  607.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION_VERIFY))
  608.     dev.closePrint()
  609.  
  610.  
  611. def AlignType13(dev, loadpaper_ui, scanner_align_load_ui): # Auto AiO (Yellowtail)
  612.     ok = loadpaper_ui()
  613.     if ok:
  614.         alignType13Phase1(dev)
  615.         ok = scanner_align_load_ui()
  616.  
  617.     return ok
  618.  
  619. def alignType13Phase1(dev):
  620.     dev.setPML(pml.OID_AUTO_ALIGNMENT, pml.AUTO_ALIGNMENT)
  621.     dev.closePML()
  622.  
  623.  
  624. def AlignType14(dev, loadpaper_ui, align_ui, invalidpen_ui):
  625.     pattern = alignType14SetPattern(dev)
  626.     if pattern is None:
  627.         invalidpen_ui()
  628.         return
  629.         
  630.     state = 0
  631.     while state != -1:
  632.         if state == 0:
  633.             state = -1
  634.             ok = loadpaper_ui()
  635.             if ok:
  636.                 alignType14Phase1(dev)
  637.                 state = 1
  638.  
  639.         elif state == 1:
  640.             values = align_ui(pattern, ALIGN_TYPE_LIDIL_DJ_D1600)
  641.             log.debug(values)
  642.             alignType14Phase2(dev, values, pattern, dev.pen_config)
  643.             state = 2
  644.  
  645.         elif state == 2:
  646.             state = -1
  647.             ok = loadpaper_ui()
  648.             if ok:
  649.                 alignType14Phase3(dev)
  650.  
  651.  
  652. def alignType14SetPattern(dev):
  653.     pattern = None
  654.     dev.pen_config = status.getPenConfiguration(dev.getStatusFromDeviceID())
  655.     log.debug("Pen config=%d" % dev.pen_config)
  656.  
  657.     if dev.pen_config in (AGENT_CONFIG_BLACK_ONLY, AGENT_CONFIG_COLOR_ONLY): # (i)
  658.         pattern = 1
  659.  
  660.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK: # (ii)
  661.         pattern = 2
  662.  
  663.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO: # (iii)
  664.         pattern = 3
  665.  
  666.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  667.         return None
  668.  
  669.     log.debug("Pattern=%d" % pattern) 
  670.     return pattern
  671.     
  672.  
  673. def alignType14Phase1(dev):
  674.     dev.printData(ldl.buildResetPacket())
  675.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION))
  676.     dev.closePrint()
  677.  
  678.  
  679. def alignType14Phase2(dev, values, pattern, pen_config):
  680.     active_colors = 0
  681.  
  682.     if pen_config == AGENT_CONFIG_BLACK_ONLY:
  683.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K
  684.         values = values[:2]
  685.  
  686.     elif pen_config == AGENT_CONFIG_COLOR_ONLY:
  687.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  688.         values = values[:2]
  689.  
  690.     elif pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  691.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_K | ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR
  692.  
  693.     elif pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  694.         active_colors = ldl.COMMAND_SET_PEN_ALIGNMENT_3_COLOR | ldl.COMMAND_SET_PEN_ALIGNMENT_3_PHOTO
  695.  
  696.     log.debug("Active colors=0x%x Values=%s" % (active_colors, values))
  697.  
  698.     dev.printData(ldl.buildSetPenAlignment3Packet(active_colors, values))
  699.     dev.closePrint()
  700.  
  701. def alignType14Phase3(dev):
  702.     dev.printData(ldl.buildResetPacket())
  703.     dev.printData(ldl.buildReportPagePacket(ldl.COMMAND_REPORT_PAGE_PEN_CALIBRATION_VERIFY))
  704.     dev.closePrint()
  705.  
  706.  
  707. def alignType2Phase1(dev): # Type 2 (8xx)
  708.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  709.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  710.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  711.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  712.     dev.closePrint()
  713.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_8xx.pcl.gz'))
  714.  
  715.  
  716. def alignType2Phase2(dev, a, b, c, d): # (8xx)
  717.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
  718.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (b - 6) * 12)
  719.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (c - 3) * 12)
  720.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (d - 3) * 12)
  721.     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
  722.     dev.closePrint()
  723.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_8xx.pcl.gz'))
  724.  
  725.  
  726. def alignType3Phase1(dev): # Type 3 (9xx)
  727.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  728.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  729.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  730.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  731.     dev.closePrint()
  732.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align1_9xx.pcl.gz'))
  733.  
  734.  
  735. def alignType3Phase2(dev, a, b, c, d): # Type 3 (9xx)
  736.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, (a - 6) * 12)
  737.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, (6 - b) * 12)
  738.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, (6 - c) * 12)
  739.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, (6 - d) * 6)
  740.     dev.closePrint()
  741.  
  742. def alignType3Phase3(dev): # Type 3 (9xx)
  743.     dev.closePrint()
  744.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align3_9xx.pcl.gz'))
  745.  
  746.  
  747. def alignType3Phase4(dev, zca): # Type 3 (9xx)
  748.     dev.writeEmbeddedPML(pml.OID_MARKING_AGENTS_INITIALIZED, 3)
  749.     dev.closePrint()
  750.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'align2_9xx.pcl.gz'))
  751.  
  752.  
  753. def alignType4Phase1(dev): # Type 4 (xBow/LIDIL 0.3.8)
  754.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
  755.  
  756.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  757.         return
  758.  
  759.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  760.         ldl_file = 'cbbcal.ldl.gz'
  761.  
  762.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  763.         ldl_file = 'cbccal.ldl.gz'
  764.  
  765.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  766.         ldl_file = 'cb2pcal.ldl.gz'
  767.  
  768.     dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, 0))
  769.     dev.closePrint()
  770.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
  771.  
  772.  
  773. def alignType4Phase2(dev, a, b, c, d, e): # Type 4 (LIDIL 0.3.8)
  774.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d" % (a, b, c, d, e))
  775.  
  776.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  777.         return
  778.  
  779.     # ZCA
  780.     zca = (7 - a) * -48
  781.     dev.printData(ldl.buildZCAPacket(zca))
  782.  
  783.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  784.         k_bidi = (6 - b) * 2
  785.         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, 0, 0, 0))
  786.  
  787.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  788.         cmy_bidi = (6 - b) * 2
  789.         dev.printData(ldl.buildSetPrinterAlignmentPacket(0, 0, 0, cmy_bidi))
  790.  
  791.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  792.         vert = (9 - b) * 2
  793.         hort = (9 - c) * -2
  794.         k_bidi = (6 - d) * 2
  795.         cmy_bidi = (6 - e) * 2
  796.  
  797.         dev.printData(ldl.buildSetPrinterAlignmentPacket(k_bidi, hort, vert, cmy_bidi))
  798.  
  799.     # Set alignment
  800.     dev.printData(ldl.buildSetPensAlignedPacket())
  801.     dev.closePrint()
  802.  
  803.  
  804. def alignType4Phase3(dev): # Type 4 (LIDIL 0.3.8)
  805.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  806.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', 'cb2pcal_done.ldl.gz'))
  807.  
  808.  
  809. def alignType5Phase1(dev): # Type 5 (xBow+/LIDIL 0.4.3)
  810.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_RESUME_NORMAL_OPERATION))
  811.  
  812.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  813.         return
  814.  
  815.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  816.         ldl_file = 'cbbcal.ldl.gz'
  817.  
  818.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  819.         ldl_file = 'cbpcal.ldl.gz'
  820.  
  821.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  822.         ldl_file = 'cbccal.ldl.gz'
  823.  
  824.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  825.         ldl_file = 'cb2pcal.ldl.gz'
  826.  
  827.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  828.         ldl_file = 'cbcpcal.ldl.gz'
  829.  
  830.     dev.printData(ldl.buildZCAPacket(0))
  831.     dev.printData(ldl.buildColorHortPacket(0))
  832.     dev.printData(ldl.buildColorVertPacket(0))
  833.     dev.printData(ldl.buildBlackVertPacket(0))
  834.     dev.printData(ldl.buildBlackHortPacket(0))
  835.     dev.printData(ldl.buildBlackBidiPacket(0))
  836.     dev.printData(ldl.buildColorBidiPacket(0))
  837.     dev.printData(ldl.buildPhotoHuePacket(0))
  838.     dev.printData(ldl.buildColorHuePacket(0))
  839.     dev.closePrint()
  840.  
  841.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', ldl_file))
  842.  
  843.  
  844. def alignType5Phase2(dev, a, b, c, d, e, f, g): # Type 5 (xBow+/LIDIL 0.4.3)
  845.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
  846.  
  847.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  848.         return
  849.  
  850.     # ZCA
  851.     zca = (7 - a) * -48
  852.     dev.printData(ldl.buildZCAPacket(zca))
  853.  
  854.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  855.         k_bidi = (6 - b) * 2
  856.         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
  857.  
  858.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  859.         kcm_bidi = (6 - b) * 2
  860.         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
  861.  
  862.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  863.         cmy_bidi = (6 - b) * 2
  864.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  865.  
  866.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  867.         vert = (9 - b) * 2
  868.         hort = (9 - c) * -2
  869.         k_bidi = (6 - d) * 2
  870.         cmy_bidi = (6 - e) * 2
  871.  
  872.         dev.printData(ldl.buildColorHortPacket(0))
  873.         dev.printData(ldl.buildColorVertPacket(0))
  874.         dev.printData(ldl.buildBlackVertPacket(vert))
  875.         dev.printData(ldl.buildBlackHortPacket(hort))
  876.         dev.printData(ldl.buildBlackBidiPacket(k_bidi))
  877.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  878.  
  879.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  880.         vert = (9 - b) * 2
  881.         hort = (9 - c) * -2
  882.         cmy_bidi = (6 - d) * 2
  883.         kcm_bidi = (6 - e) * 2
  884.  
  885.         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
  886.         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
  887.  
  888.         dev.printData(ldl.buildPhotoHortPacket(hort))
  889.         dev.printData(ldl.buildPhotoVertPacket(vert))
  890.         dev.printData(ldl.buildColorHortPacket(0))
  891.         dev.printData(ldl.buildColorVertPacket(0))
  892.         dev.printData(ldl.buildPhotoBidiPacket(kcm_bidi))
  893.         dev.printData(ldl.buildColorBidiPacket(cmy_bidi))
  894.         dev.printData(ldl.buildPhotoHuePacket(photo_adj))
  895.         dev.printData(ldl.buildColorHuePacket(color_adj))
  896.  
  897.     # Set alignment
  898.     dev.printData(ldl.buildSetPensAlignedPacket())
  899.     dev.closePrint()
  900.  
  901.  
  902. def alignType5Phase3(dev): # Type 5 (xBow+/LIDIL 0.4.3)
  903.     dev.closePrint()
  904.     if dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  905.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cb2pcal_done.ldl.gz"))
  906.  
  907.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  908.         dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'ldl', "cbccal_done.ldl.gz"))
  909.  
  910.  
  911. def alignType6Phase1(dev): # Type 6 (xBow AiO)
  912.     dev.printData(ldl.buildPrintInternalPagePacket())
  913.     dev.closePrint()
  914.  
  915. def alignType7Phase1(dev): # Type 7 (xBow VIP)
  916.     # Zero out all alignment values
  917.     dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, 0)
  918.  
  919.     dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, 0)
  920.     dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, 0)
  921.     dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, 0)
  922.  
  923.     dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, 0)
  924.     dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, 0)
  925.     dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, 0)
  926.  
  927.     dev.writeEmbeddedPML(pml.OID_ZCA, 0)
  928.  
  929.     if dev.pen_config in (AGENT_CONFIG_NONE, AGENT_CONFIG_INVALID):
  930.         return
  931.  
  932.     elif dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  933.         pcl_file = 'crbcal.pcl.gz'
  934.  
  935.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  936.         pcl_file = 'crpcal.pcl.gz'
  937.  
  938.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  939.         pcl_file = 'crccal.pcl.gz'
  940.  
  941.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  942.         pcl_file = 'crcbcal.pcl.gz'
  943.  
  944.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  945.         pcl_file = 'crcpcal.pcl.gz'
  946.  
  947.     dev.closePrint()
  948.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', pcl_file))
  949.  
  950.  
  951. def alignType7Phase2(dev, a, b, c, d, e, f, g): # Type 7 (xBow VIP)
  952.     log.debug("A=%d, B=%d, C=%d, D=%d, E=%d, F=%d, G=%d" % (a, b, c, d, e, f, g))
  953.  
  954.     # ZCA
  955.     zca = (7 - a) * -12
  956.     dev.writeEmbeddedPML(pml.OID_ZCA, zca)
  957.  
  958.     if dev.pen_config == AGENT_CONFIG_BLACK_ONLY:
  959.         k_bidi = (6 - b) * 6
  960.         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
  961.  
  962.     elif dev.pen_config == AGENT_CONFIG_PHOTO_ONLY:
  963.         kcm_bidi = (6 - b) * 6
  964.         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
  965.  
  966.     elif dev.pen_config == AGENT_CONFIG_COLOR_ONLY:
  967.         cmy_bidi = (6 - b) * 6
  968.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  969.  
  970.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_BLACK:
  971.         vert = (9 - b) * 6
  972.         hort = (9 - c) * -6
  973.         k_bidi = (6 - d) * 6
  974.         cmy_bidi = (6 - e) * 6
  975.  
  976.         dev.writeEmbeddedPML(pml.OID_AGENT1_BIDIR_ADJUSTMENT, k_bidi)
  977.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  978.         dev.writeEmbeddedPML(pml.OID_AGENT2_HORIZONTAL_ALIGNMENT, hort)
  979.         dev.writeEmbeddedPML(pml.OID_AGENT2_VERTICAL_ALIGNMENT, vert)
  980.  
  981.     elif dev.pen_config == AGENT_CONFIG_COLOR_AND_PHOTO:
  982.         vert = (9 - b) * 6
  983.         hort = (9 - c) * -6
  984.         cmy_bidi = (6 - d) * 6
  985.         kcm_bidi = (6 - e) * 6
  986.  
  987.         photo_adj = colorcal.PHOTO_ALIGN_TABLE[f][g]
  988.         color_adj = colorcal.COLOR_ALIGN_TABLE[f][g]
  989.  
  990.         x = (color_adj << 8) + photo_adj
  991.  
  992.         dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, x)
  993.  
  994.         dev.writeEmbeddedPML(pml.OID_AGENT2_BIDIR_ADJUSTMENT, cmy_bidi)
  995.         dev.writeEmbeddedPML(pml.OID_AGENT3_BIDIR_ADJUSTMENT, kcm_bidi)
  996.         dev.writeEmbeddedPML(pml.OID_AGENT3_HORIZONTAL_ALIGNMENT, hort)
  997.         dev.writeEmbeddedPML(pml.OID_AGENT3_VERTICAL_ALIGNMENT, vert)
  998.  
  999.     dev.closePrint()
  1000.  
  1001. def alignType7Phase3(dev): # Type 7 (xBow VIP)
  1002.     dev.closePrint()
  1003.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', "crcaldone.pcl.gz"))
  1004.  
  1005.  
  1006. def alignType8Phase1(dev): # 450
  1007.     pens = dev.getStatusFromDeviceID()['agents']
  1008.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1009.  
  1010.     if AGENT_TYPE_KCM in pen_types:
  1011.         f, num_inks = 'align6_450.pcl.gz', 6
  1012.     else:
  1013.         f, num_inks = 'align4_450.pcl.gz', 4
  1014.  
  1015.     dev.closePrint()
  1016.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', f))
  1017.  
  1018.     return num_inks
  1019.  
  1020.  
  1021. def alignType8Phase2(dev, num_inks, a, b, c, d): # 450
  1022.     align_values1 = {1 : '\x00\x00\x18',
  1023.                       2 : '\x00\x00\x12',
  1024.                       3 : '\x00\x00\x0c',
  1025.                       4 : '\x00\x00\x06',
  1026.                       5 : '\x00\x00\x00',
  1027.                       6 : '\x01\x00\x06',
  1028.                       7 : '\x01\x00\x0c',
  1029.                       8 : '\x01\x00\x12',
  1030.                       9 : '\x01\x00\x18',
  1031.                     }
  1032.  
  1033.     align_values2 = {1 : '\x00\x00\x12',
  1034.                       2 : '\x00\x00\x0c',
  1035.                       3 : '\x00\x00\x06',
  1036.                       4 : '\x00\x00\x00',
  1037.                       5 : '\x01\x00\x06',
  1038.                       6 : '\x01\x00\x0c',
  1039.                       7 : '\x01\x00\x12',
  1040.                       8 : '\x01\x00\x18',
  1041.                       9 : '\x01\x00\x1e',
  1042.                     }
  1043.  
  1044.     align_values3 = {1 : '\x00\x00\x24',
  1045.                       2 : '\x00\x00\x18',
  1046.                       3 : '\x00\x00\x12',
  1047.                       4 : '\x00\x00\x06',
  1048.                       5 : '\x00\x00\x00',
  1049.                       6 : '\x01\x00\x06',
  1050.                       7 : '\x01\x00\x12',
  1051.                       8 : '\x01\x00\x18',
  1052.                       9 : '\x01\x00\x24',
  1053.                     }
  1054.  
  1055.     if num_inks == 4:
  1056.         s = ''.join([pcl.UEL,
  1057.               '@PJL ENTER LANGUAGE=PCL3GUI\n',
  1058.               pcl.RESET,
  1059.               pcl.ESC, '*o5W\x1a\x01', align_values1[a],
  1060.               pcl.ESC, '*o5W\x1a\x02', align_values2[a],
  1061.               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
  1062.               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
  1063.               pcl.ESC, '*o5W\x1a\x08', align_values1[c],
  1064.               pcl.ESC, '*o5W\x1a\x07', align_values1[d],
  1065.               pcl.RESET,
  1066.               pcl.UEL])
  1067.  
  1068.     else: # 6
  1069.         s = ''.join([pcl.UEL,
  1070.               '@PJL ENTER LANGUAGE=PCL3GUI\n',
  1071.               pcl.RESET,
  1072.               pcl.ESC, '*o5W\x1a\x05', align_values1[a],
  1073.               pcl.ESC, '*o5W\x1a\x06', align_values3[a],
  1074.               pcl.ESC, '*o5W\x1a\x03', align_values1[b],
  1075.               pcl.ESC, '*o5W\x1a\x04', align_values1[b],
  1076.               pcl.ESC, '*o5W\x1a\x0a', align_values1[c],
  1077.               pcl.ESC, '*o5W\x1a\x09', align_values1[d],
  1078.               pcl.RESET,
  1079.               pcl.UEL])
  1080.  
  1081.     dev.printData(s)
  1082.     dev.closePrint()
  1083.     
  1084.     
  1085. def AlignType12(dev, loadpaper_ui):
  1086.     if loadpaper_ui():
  1087.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_ALIGNMENT_PAGE)
  1088.         dev.closePML()
  1089.  
  1090. # ********************** Clean **********************
  1091.  
  1092.  
  1093. def cleaning(dev, clean_type, level1, level2, level3,
  1094.               loadpaper_ui, dlg1, dlg2, dlg3, wait_ui):
  1095.  
  1096.     state = 0
  1097.  
  1098.     while state != -1:
  1099.         if state == 0: # Initial level1 print
  1100.             state = 1
  1101.             if clean_type == CLEAN_TYPE_PCL_WITH_PRINTOUT:
  1102.                 ok = loadpaper_ui()
  1103.                 if not ok:
  1104.                     state = -1
  1105.  
  1106.         elif state == 1: # Do level 1
  1107.             level1(dev)
  1108.             state = 2
  1109.  
  1110.         elif state == 2: # Load plain paper
  1111.             state = -1
  1112.             ok = loadpaper_ui()
  1113.             if ok:
  1114.                 state = 3
  1115.  
  1116.         elif state == 3: # Print test page
  1117.             state = 4
  1118.             print_clean_test_page(dev)
  1119.  
  1120.         elif state == 4: # Need level 2?
  1121.             state = -1
  1122.             ok = dlg1()
  1123.             if ok:
  1124.                 state = 5
  1125.  
  1126.         elif state == 5: # Do level 2
  1127.             level2(dev)
  1128.             state = 6
  1129.  
  1130.         elif state == 6: # Load plain paper
  1131.             state = -1
  1132.             ok = loadpaper_ui()
  1133.             if ok:
  1134.                 state = 7
  1135.  
  1136.         elif state == 7: # Print test page
  1137.             state = 8
  1138.             print_clean_test_page(dev)
  1139.  
  1140.         elif state == 8: # Need level 3?
  1141.             state = -1
  1142.             ok = dlg2()
  1143.             if ok:
  1144.                 state = 9
  1145.  
  1146.         elif state == 9: # Do level 3
  1147.             level3(dev)
  1148.             state = 10
  1149.  
  1150.         elif state == 10: # Load plain paper
  1151.             state = -1
  1152.             ok = loadpaper_ui()
  1153.             if ok:
  1154.                 state = 11
  1155.  
  1156.         elif state == 11: # Print test page
  1157.             state = 12
  1158.             print_clean_test_page(dev)
  1159.  
  1160.         elif state == 12:
  1161.             state = -1
  1162.             dlg3()
  1163.  
  1164.     return ok
  1165.  
  1166.  
  1167. def print_clean_test_page(dev):
  1168.     dev.closePrint()
  1169.     dev.printGzipFile(os.path.join(prop.home_dir, 'data',
  1170.                       'ps', 'clean_page.pdf.gz'), raw=False)
  1171.  
  1172. def cleanType1(dev): # PCL, Level 1
  1173.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_CLEAN)
  1174.     dev.closePrint()
  1175.  
  1176. def primeType1(dev): # PCL, Level 2
  1177.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_PRIME)
  1178.     dev.closePrint()
  1179.  
  1180. def wipeAndSpitType1(dev): # PCL, Level 3
  1181.     dev.writeEmbeddedPML(pml.OID_CLEAN, pml.CLEAN_WIPE_AND_SPIT)
  1182.     dev.closePrint()
  1183.  
  1184. def cleanType2(dev): # LIDIL, Level 1
  1185.     dev.printData(ldl.buildResetPacket())
  1186.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1187.                                        ldl.COMMAND_HANDLE_PEN,
  1188.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL1))
  1189.     dev.closePrint()
  1190.  
  1191. def primeType2(dev): # LIDIL, Level 2
  1192.     dev.printData(ldl.buildResetPacket())
  1193.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1194.                                        ldl.COMMAND_HANDLE_PEN,
  1195.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL2))
  1196.     dev.closePrint()
  1197.  
  1198. def wipeAndSpitType2(dev): # LIDIL, Level 3
  1199.     dev.printData(ldl.buildResetPacket())
  1200.     dev.printData(ldl.buildLIDILPacket(ldl.PACKET_TYPE_COMMAND,
  1201.                                        ldl.COMMAND_HANDLE_PEN,
  1202.                                        ldl.COMMAND_HANDLE_PEN_CLEAN_LEVEL3))
  1203.     dev.closePrint()
  1204.  
  1205.  
  1206. # ********************** Color Cal **********************
  1207.  
  1208.  
  1209. def colorCalType1(dev, loadpaper_ui, colorcal_ui, photopenreq_ui): # 450
  1210.     value, state = 4, 0
  1211.     ok = False
  1212.     while state != -1:
  1213.  
  1214.         if state == 0:
  1215.             if colorCalType1PenCheck(dev):
  1216.                 state = 1
  1217.             else:
  1218.                 state = 100
  1219.  
  1220.         elif state == 1:
  1221.             state = -1
  1222.             ok = loadpaper_ui()
  1223.             if ok:
  1224.                 colorCalType1Phase1(dev)
  1225.                 state = 2
  1226.  
  1227.         elif state == 2:
  1228.             state = -1
  1229.             ok, value = colorcal_ui()
  1230.             if ok:
  1231.                 state = 3
  1232.  
  1233.         elif state == 3:
  1234.             colorCalType1Phase2(dev, value)
  1235.             state = -1
  1236.  
  1237.         elif state == 100:
  1238.             ok = False
  1239.             photopenreq_ui()
  1240.             state = -1
  1241.  
  1242.     return ok
  1243.  
  1244.  
  1245. def colorCalType1PenCheck(dev): # 450
  1246.     pens = dev.getStatusFromDeviceID()['agents']
  1247.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1248.  
  1249.     if AGENT_TYPE_KCM in pen_types:
  1250.         return True
  1251.  
  1252.     else:
  1253.         log.error("Cannot perform color calibration with no photo pen installed.")
  1254.         return False
  1255.  
  1256.  
  1257. def colorCalType1Phase1(dev): # 450
  1258.     dev.closePrint()
  1259.     dev.printGzipFile(os.path.join(prop.home_dir, 'data', 'pcl', 'colorcal1_450.pcl.gz'))
  1260.  
  1261.  
  1262. def colorCalType1Phase2(dev, value): # 450
  1263.     color_cal = {1 : ('\x0f\x3c', '\x17\x0c'),
  1264.                   2 : ('\x10\xcc', '\x15\x7c'),
  1265.                   3 : ('\x12\x5c', '\x13\xec'),
  1266.                   4 : ('\x13\xec', '\x12\x5c'),
  1267.                   5 : ('\x15\x7c', '\x10\xcc'),
  1268.                   6 : ('\x17\x0c', '\x0f\x3c'),
  1269.                   7 : ('\x18\x9c', '\x0d\xac'),
  1270.                 }
  1271.  
  1272.     s = ''.join([pcl.UEL,
  1273.                   '@PJL ENTER LANGUAGE=PCL3GUI\n',
  1274.                   pcl.RESET,
  1275.                   pcl.ESC, '*o5W\x1a\x0c\x00', color_cal[value][0],
  1276.                   pcl.ESC, '*o5W\x1a\x0b\x00', color_cal[value][1],
  1277.                   pcl.RESET,
  1278.                   pcl.UEL])
  1279.  
  1280.     dev.printData(s)
  1281.     dev.closePrint()
  1282.  
  1283. #
  1284. # COLOR CAL TYPE 2
  1285. #
  1286.  
  1287. def colorCalType2(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
  1288.     value, state = 4, 0
  1289.     ok = True
  1290.     while state != -1:
  1291.  
  1292.         if state == 0:
  1293.             if colorCalType2PenCheck(dev):
  1294.                 state = 1
  1295.             else:
  1296.                 state = 100
  1297.  
  1298.         elif state == 1:
  1299.             state = -1
  1300.             ok = loadpaper_ui()
  1301.             if ok:
  1302.                 colorCalType2Phase1(dev)
  1303.                 state = 2
  1304.  
  1305.         elif state == 2:
  1306.             state = -1
  1307.             ok, value = colorcal_ui()
  1308.             if ok:
  1309.                 state = 3
  1310.  
  1311.         elif state == 3:
  1312.             colorCalType2Phase2(dev, value)
  1313.             state = -1
  1314.  
  1315.         elif state == 100:
  1316.             photopenreq_ui()
  1317.             ok = False
  1318.             state = -1
  1319.  
  1320.     return ok
  1321.  
  1322. def colorCalType2PenCheck(dev):
  1323.     pens = dev.getStatusFromDeviceID()['agents']
  1324.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1325.  
  1326.     if not AGENT_TYPE_NONE in pen_types:
  1327.         return True
  1328.  
  1329.     else:
  1330.         log.error("Cannot perform color calibration with pens missing.")
  1331.         return False
  1332.  
  1333. def colorCalType2Phase1(dev):
  1334.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  1335.                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1336.  
  1337.     dev.closePrint()
  1338.  
  1339.  
  1340. def colorCalType2Phase2(dev, value):
  1341.     c = colorcal.COLOR_CAL_TABLE
  1342.     p = ''.join(['\x1b&b19WPML \x04\x00\x06\x01\x04\x01\x05\x01\t\x08\x04',
  1343.                    chr(c[value*4]+100), chr(c[value*4+1]+100),
  1344.                    chr(c[value*4+2]+100), chr(c[value*4+3]+100),
  1345.                    '\x1b%-12345X'])
  1346.  
  1347.     dev.printData(p)
  1348.     dev.closePrint()
  1349.  
  1350.  
  1351. #
  1352. # COLOR CAL TYPE 3
  1353. #
  1354.  
  1355. def colorCalType3(dev, loadpaper_ui, colorcal_ui, photopenreq_ui):
  1356.     value, state = 4, 0
  1357.     ok = True
  1358.     while state != -1:
  1359.  
  1360.         if state == 0:
  1361.             if colorCalType3PenCheck(dev):
  1362.                 state = 1
  1363.             else:
  1364.                 state = 100
  1365.  
  1366.         elif state == 1:
  1367.             state = -1
  1368.             ok = loadpaper_ui()
  1369.             if ok:
  1370.                 colorCalType3Phase1(dev)
  1371.                 state = 2
  1372.  
  1373.         elif state == 2:
  1374.             state = -1
  1375.             ok, valueA = colorcal_ui('A', 21)
  1376.             if ok:
  1377.                 state = 3
  1378.  
  1379.         elif state == 3:
  1380.             state = -1
  1381.             ok, valueB = colorcal_ui('B', 21)
  1382.             if ok:
  1383.                 state = 4
  1384.  
  1385.         elif state == 4:
  1386.             colorCalType3Phase2(dev, valueA, valueB)
  1387.             state = -1
  1388.  
  1389.         elif state == 100:
  1390.             photopenreq_ui()
  1391.             ok = False
  1392.             state = -1
  1393.  
  1394.     return ok
  1395.  
  1396. def colorCalType3PenCheck(dev):
  1397.     pens = dev.getStatusFromDeviceID()['agents']
  1398.     pen_types = [pens[x]['type'] for x in range(len(pens))]
  1399.  
  1400.     if AGENT_TYPE_KCM in pen_types or \
  1401.       AGENT_TYPE_BLUE in pen_types:
  1402.         return True
  1403.  
  1404.     else:
  1405.         log.error("Cannot perform color calibration with no photo (or photo blue) pen installed.")
  1406.         return False
  1407.  
  1408.  
  1409. def colorCalType3Phase1(dev):
  1410.     dev.writeEmbeddedPML(pml.OID_PRINT_INTERNAL_PAGE,
  1411.                          pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1412.     dev.closePrint()
  1413.  
  1414. def colorCalType3Phase2(dev, A, B):
  1415.     photo_adj = colorcal.PHOTO_ALIGN_TABLE[A-1][B-1]
  1416.     color_adj = colorcal.COLOR_ALIGN_TABLE[A-1][B-1]
  1417.     adj_value = (color_adj << 8L) + photo_adj
  1418.  
  1419.     dev.writeEmbeddedPML(pml.OID_COLOR_CALIBRATION_SELECTION, adj_value)
  1420.     dev.closePrint()
  1421.  
  1422. def colorCalType4(dev, loadpaper_ui, colorcal_ui, wait_ui):
  1423.     state = 0
  1424.     ok = True
  1425.  
  1426.     while state != -1:
  1427.         if state == 0:
  1428.             state = -1
  1429.             ok = loadpaper_ui()
  1430.             if ok:
  1431.                 colorCalType4Phase1(dev)
  1432.                 state = 2
  1433.  
  1434.         elif state == 2:
  1435.             state = -1
  1436.             #wait_ui(90)
  1437.             ok, values = colorcal_ui()
  1438.             if ok:
  1439.                 state = 3
  1440.  
  1441.         elif state == 3:
  1442.             colorCalType4Phase2(dev, values)
  1443.             #wait_ui(5)
  1444.             state = 4
  1445.  
  1446.         elif state == 4:
  1447.             state = -1
  1448.             ok = loadpaper_ui()
  1449.             if ok:
  1450.                 colorCalType4Phase3(dev)
  1451.                 state = -1
  1452.  
  1453.     return ok
  1454.  
  1455.  
  1456. def colorCalType4Phase1(dev):
  1457.     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
  1458.               pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1459.               
  1460.     dev.closePML()
  1461.  
  1462.  
  1463. def colorCalType4AdjValue(value):
  1464.     if value >= 100:
  1465.         return 200
  1466.     return value+100
  1467.  
  1468.  
  1469. def colorCalType4Phase2(dev, values):
  1470.     if -1 in values:
  1471.         Cadj, Madj, Yadj, cadj, madj, kadj = 244, 244, 244, 244, 244, 244
  1472.     else:
  1473.         sel1, sel2, sel3, sel4 = values
  1474.         tmp1 = colorcal.TYPE_4_C_TABLE[sel1][sel2]
  1475.         tmp2 = colorcal.TYPE_4_LC_TABLE[sel3][sel4]
  1476.  
  1477.         Cadj = colorCalType4AdjValue(tmp1)
  1478.         cadj = colorCalType4AdjValue(tmp1+tmp2)
  1479.  
  1480.         tmp1 = colorcal.TYPE_4_M_TABLE[sel1][sel2]
  1481.         tmp2 = colorcal.TYPE_4_LM_TABLE[sel3][sel4]
  1482.  
  1483.         Madj = colorCalType4AdjValue(tmp1)
  1484.         madj = colorCalType4AdjValue(tmp1+tmp2)
  1485.  
  1486.         Yadj = colorCalType4AdjValue(colorcal.TYPE_4_Y_TABLE[sel1][sel2])
  1487.         kadj = colorCalType4AdjValue(0)
  1488.  
  1489.     log.debug("C=%d, M=%d, Y=%d, c=%d, m=%d, k=%d\n" % (Cadj, Madj, Yadj, cadj, madj, kadj))
  1490.  
  1491.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_1,
  1492.                             kadj)
  1493.                             
  1494.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_2,
  1495.                             Cadj)
  1496.                             
  1497.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_3,
  1498.                             Madj)
  1499.     
  1500.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_4,
  1501.                             Yadj)
  1502.                             
  1503.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_5,
  1504.                             cadj)
  1505.     
  1506.     dev.setPML(pml.OID_COLOR_CALIBRATION_ARRAY_6,
  1507.                             madj)
  1508.                             
  1509.     dev.closePML()
  1510.  
  1511.  
  1512. def colorCalType4Phase3(dev):
  1513.     dev.setPML(pml.OID_PRINT_INTERNAL_PAGE,
  1514.                          pml.PRINT_INTERNAL_PAGE_COLOR_PALETTE_CMYK_PAGE)
  1515.                          
  1516.     dev.closePML()
  1517.  
  1518.  
  1519. def colorCalType5(dev, loadpaper_ui):
  1520.     if loadpaper_ui():
  1521.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 20;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1522.         dev.closePrint()
  1523.  
  1524.         
  1525. def colorCalType6(dev, loadpaper_ui):
  1526.     if loadpaper_ui():
  1527.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_COLOR_CAL)
  1528.         dev.closePML()
  1529.         
  1530. def colorCalType7(dev, loadpaper_ui):
  1531.     if loadpaper_ui():
  1532.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_AUTOMATIC_COLOR_CALIBRATION)
  1533.         dev.closePML()
  1534.  
  1535. # ********************** LF Cal **********************        
  1536.         
  1537. def linefeedCalType1(dev, loadpaper_ui):
  1538.     if loadpaper_ui():
  1539.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 3;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1540.         dev.closePrint()
  1541.         
  1542. def linefeedCalType2(dev, loadpaper_ui):
  1543.     if loadpaper_ui():
  1544.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_LINEFEED_CALIBRATION)
  1545.         dev.closePML()
  1546.  
  1547.  
  1548. # ********************** PQ Diag **********************        
  1549.         
  1550. def printQualityDiagType1(dev, loadpaper_ui):
  1551.     if loadpaper_ui():
  1552.         dev.printData("""\x1b%-12345X@PJL ENTER LANGUAGE=PCL3GUI\n\x1bE\x1b%Puifp.multi_button_push 14;\nudw.quit;\x1b*rC\x1bE\x1b%-12345X""")
  1553.         dev.closePrint()
  1554.  
  1555. def printQualityDiagType2(dev, loadpaper_ui):
  1556.     if loadpaper_ui():
  1557.         dev.setPML(pml.OID_PRINT_INTERNAL_PAGE, pml.PRINT_INTERNAL_PAGE_PRINT_QUALITY_DIAGNOSTIC)
  1558.         dev.closePML()
  1559.